#include <iostream>
#include <cstdio>
using namespace std;

const int maxsize = 50005;
int L, N, M;
int arr[maxsize];
int mid, ans, l, r;

bool judge(int x)
{
    int tot = 0; //计数器 记录以当前为答案需移走的石头的数量
    int i = 0;   //记录下一块石头的编号
    int now = 0; //当前位置
    while (i < N + 1)
    {
        i++;
        if (arr[i] - arr[now] < x)
        {
            tot += 1;
        }
        else
        {
            now = i;
        }
        //printf("mid=[%d]:tot=[%d],i=[%d]arr[%d]=[%d],now=[%d]\n", x, tot, i, i, arr[i], now);
    }
    //printf("---->NEXT<----\n");
    if (tot > M)
        return false;
    else
        return true;
}
int main()
{
    scanf("%d%d%d", &L, &N, &M);
    for (int i = 1; i <= N; i++)
    {
        scanf("%d", &arr[i]);
    }
    arr[N + 1] = L;
    arr[0] = 0;
    l = 0, r = L;
    while (l <= r)
    {
        mid = (l + r) >> 1;
        if (judge(mid))
        {
            ans = mid;
            l = mid + 1;
        }
        else
        {
            r = mid - 1;
        }
    }
    printf("%d", ans);
    return 0;
}